﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HellCook.DataAccess;
using HellCook.Model;
using System.Collections.ObjectModel;
//comentario de prueba
namespace HellCook.Business
{
    public static class Ingrediente_Registro
    {        
        public static string NuevoIngrediente(string ingredient_Name, string quantity, string measured_Type, string food_group, string life_Time, string Cantidad_Mensual)
        {
            string Message = String.Empty;

            if (!string.IsNullOrEmpty(life_Time))
            {
                if (DateTime.Now > Convert.ToDateTime(life_Time))
                {
                    return ("Fecha no aceptada.");
                }
            }
            else
            {
                return("La fecha es necesaria.");
            }

            if (String.IsNullOrEmpty(ingredient_Name))
            {
                return("El nombre del menuSemana no puede ser vacio.");
            }

            if (String.IsNullOrEmpty(quantity))
            {
                return ("La cantidad no puede ser vacia.");
            }

            if (String.IsNullOrEmpty(measured_Type))
            {
                return ("El tipo de medida no puede estar vacia.");
            }

            try
            {
                int VariableQuantity = Convert.ToInt16(quantity);
                DateTime VariableLifeTime = Convert.ToDateTime(life_Time);

                int CantidadMensual = 0;
                if (!String.IsNullOrEmpty(Cantidad_Mensual))
                {
                    CantidadMensual = Convert.ToInt16(Cantidad_Mensual);
                }
                else
                {
                }
                Ingrediente ingredient = new Ingrediente() { Grupo_Alimenticio = food_group, Nombre_Ingrediente = ingredient_Name, Fecha_Expiracion = VariableLifeTime, Tipo_Medida = measured_Type, Cantidad = VariableQuantity, Cantidad_Maxima = CantidadMensual};

                Ingrediente Existe = Ingrediente_AdministradorBaseDeDatos.ObtenerUnIngredientePorNombre(ingredient.Nombre_Ingrediente);
                if (Existe == null)
                {
                    Message = Ingrediente_AdministradorBaseDeDatos.InsertarIngrediente(ingredient);
                }
                else
                {
                    return("Un menuSemana con el nombre similar existe, cambie el nombre.");
                }
            }
            catch (Exception exception)
            {
                return (exception.Message);
            }

            return (Message);
        }

        public static Collection<Ingrediente> GetAllIngredients()
        {
            return (Ingrediente_AdministradorBaseDeDatos.ObtenerTodosLosIngredientes());
        }

        public static Ingrediente GetOneIngredientByName(string name)
        {
            if (String.IsNullOrEmpty(name))
            {
                return (null);
            }
            else
            {
                return (Ingrediente_AdministradorBaseDeDatos.ObtenerUnIngredientePorNombre(name));
            }
        }

        public static string ModificarIngrediente(int codigo, string ingredient_Name, string quantity, string measured_Type, string food_group, string life_Time, string Cantidad_Mensual)
        {
            string Message = String.Empty;

            if (!string.IsNullOrEmpty(life_Time))
            {
                if (DateTime.Now > Convert.ToDateTime(life_Time))
                {
                    return ("Fecha no aceptada.");
                }
            }
            else
            {
                return ("La fecha es necesaria.");
            }

            if (String.IsNullOrEmpty(ingredient_Name))
            {
                return ("El nombre del menuSemana no puede estar vacio.");
            }

            if (String.IsNullOrEmpty(quantity))
            {
                return ("La cantidad no puede estar vacia.");
            }

            if (String.IsNullOrEmpty(measured_Type))
            {
                return ("El tipo de medida no puede estar vacia.");
            }

            try
            {
                int VariableQuantity = Convert.ToInt16(quantity);
                DateTime VariableLifeTime = Convert.ToDateTime(life_Time);

                int CantidadMensual = 0;
                if (!String.IsNullOrEmpty(Cantidad_Mensual))
                {
                    CantidadMensual = Convert.ToInt16(Cantidad_Mensual);
                }

                Ingrediente ingredient = new Ingrediente() { Cantidad_Maxima = CantidadMensual, Grupo_Alimenticio = food_group, Nombre_Ingrediente = ingredient_Name, Fecha_Expiracion = VariableLifeTime, Tipo_Medida = measured_Type, Cantidad = VariableQuantity };
                Message = Ingrediente_AdministradorBaseDeDatos.ModificarIngrediente(codigo, ingredient);
            }
            catch (Exception exception)
            {
                return (exception.Message);
            }

            return (Message);
        }

        public static Ingrediente GetOneIngredientByCode(string code)
        {
            if (String.IsNullOrEmpty(code))
            {
                return (null);
            }
            else
            {
                try
                {
                    int Test = Convert.ToInt16(code);
                    return (Ingrediente_AdministradorBaseDeDatos.ObtenerUnIngredientePorCodigo(code));
                }
                catch (Exception)
                {
                    return (null);
                }
            }
        }
    }
}
